package myDictionary;

import com.sun.javafx.image.BytePixelSetter;
import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils;

import java.io.*;

public class DictionaryDaoIo implements DictionaryDao {
    @Override
    public void sava(MyDictionary myDictionary) {
      //把传入的参数myDictionary对象写入文件d:\\d.txt
        //字符缓冲流一次写一行
        BufferedWriter bw=null;
        try {
            //追加内容
            bw=new BufferedWriter(new FileWriter("d:\\d.txt",true));
            bw.write(myDictionary.getId()+"--"+myDictionary.getEnglish()+"--" +
                    myDictionary.getChinese()+"--"+myDictionary.getCommenrs());
            bw.newLine();
            bw.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(bw!=null){
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Override
    public MyDictionary query(String name) {
        //根据传入的英文name，返回词典对象
        //循环读取文件中的每一行文本
        //比较（name&文本）
        //相同：返回对象
        BufferedReader br=null;
        try {
            br=new BufferedReader(new FileReader("d:\\d.txt"));
            String line;
            while ((line=br.readLine())!=null){
                //读取的一行文本内容：1--apple--苹果--苹果
                String[] data=line.split("--");
                if (name.equals(data[1])){
                    int id=Integer.parseInt(data[0]);
                    String english=data[1];
                    String chinese=data[2];
                    String comments=data[3];
                    MyDictionary d=new MyDictionary(id,english,chinese,comments);
                    return d;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(br!=null){
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }

    @Override
    public void queryAll() {
        BufferedReader br=null;
        try {
            br=new BufferedReader(new FileReader("d:\\d.txt"));
            String line=null;
            while ((line=br.readLine())!=null){
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(br!=null){
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Override
    public void delete(String name) {
      //判断要删除的内容是否存在
      //若不存在提示不存在
      //若存在：
      //    循环操作：
      //    读取文件中的每一行文本
      //    比较三否要是删除的内容
      //    若不是，写入新文件
      //    最后将原文件删除，新文件重命名
      if(query(name)==null){
        System.out.println("");
        return;
      }else{
        BufferedWriter bw = null;
        BufferedReader br =null;
        try {
          br=new BufferedReader(new FileReader("d:\\d.txt"));
          bw=new BufferedWriter(new FileWriter("d:\\new.txt",true));
          String line;
          while((line=br.readLine())!=null){
            String[] data=line.split("--");
            if(!name.equals(data[1])){
              bw.write(line);
              bw.newLine();
              bw.flush();
            }
          }
        } catch (IOException e) {
          e.printStackTrace();
        }finally {
          if (br!=null){
            try {
              br.close();
            } catch (IOException e) {
              e.printStackTrace();
            }
          }
          if (bw!=null){
            try {
              br.close();
            } catch (IOException e) {
              e.printStackTrace();
            }
          }
        }
      }

      // 最后原文件删除，新文件重命名
      File oldFile=new File("d:\\d.txt");
      File newFile=new File("d:\\new.txt");
      oldFile.delete();
      newFile.delete();

    }
}
